﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades.Sistema.Distribucion;
using Entidades.Sistema.Venta;

namespace Mapping.Sistema.Distribucion
{
    public static class MappingDiagramacionDistribucion
    {
        public static List<DiagramacionDistribucion> ConsultarDiagramacionDistribucion()
        {
            try
            {
                List<Pedido> pedidos = Mapping.Sistema.Venta.MappingPedidos.ConsultarPedidos();

                SqlCommand cmdDiagramacionDistribucions = new SqlCommand();
                cmdDiagramacionDistribucions.CommandText = "sp_ConsultarDiagramacionDistribucion";
                cmdDiagramacionDistribucions.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdDiagramacionDistribucions.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();

                SqlDataReader drDiagramacionDistribucions = cmdDiagramacionDistribucions.ExecuteReader();

                List<DiagramacionDistribucion> ColDiagramacionDistribucions = new List<DiagramacionDistribucion>();
                

                while (drDiagramacionDistribucions.Read())
                {
                    DiagramacionDistribucion oDiagramacionDistribucion = new DiagramacionDistribucion();
                    oDiagramacionDistribucion.IdDiagramacionDistribucion = Convert.ToInt32(drDiagramacionDistribucions["Id_DiagramacionDistribucion"]);
                    oDiagramacionDistribucion.Estado = (DiagramacionDistribucion.DiagramacionDistribucionEstado)Enum.Parse(typeof(DiagramacionDistribucion.DiagramacionDistribucionEstado), drDiagramacionDistribucions["Estado"].ToString());
                    oDiagramacionDistribucion.Fecha = Convert.ToDateTime(drDiagramacionDistribucions["Fecha"]);

                    SqlCommand cmdDiagramacionDistribucionDetalle = new SqlCommand();
                    cmdDiagramacionDistribucionDetalle.CommandText = "sp_ConsultarcDiagramacionDistribucionDetalle";
                    cmdDiagramacionDistribucionDetalle.CommandType = System.Data.CommandType.StoredProcedure;
                    cmdDiagramacionDistribucionDetalle.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                    cmdDiagramacionDistribucionDetalle.Parameters.Add("@Id_Diagramacion", System.Data.SqlDbType.Int).Value = oDiagramacionDistribucion.IdDiagramacionDistribucion;
                    SqlDataReader drDetalle = cmdDiagramacionDistribucionDetalle.ExecuteReader();

                    while (drDetalle.Read())
                    {
                        DiagramacionDistribucionDetalle oDetalle = new DiagramacionDistribucionDetalle();
                        oDetalle.IdDiagramacionDistribucionDetalle = Convert.ToInt16(drDetalle["Id_DiagramacionDistribucionDetalle"]);
                        oDetalle.Empleado = Mapping.Sistema.Base.MappingEmpleado.ConsultarEmpleadoLeerPorClave(Convert.ToInt16(drDetalle["Id_Empleado"]));
                        oDetalle.Vehiculo = Mapping.Sistema.Distribucion.MappingVehiculo.ConsultarVehiculoPorClave(Convert.ToInt16(drDetalle["Id_Vehiculo"]));

                        oDiagramacionDistribucion.AgregarDetalle(oDetalle);


                        SqlCommand cmdDiagramacionDistribucionDetallePedido = new SqlCommand();
                        cmdDiagramacionDistribucionDetallePedido.CommandText = "sp_ConsultarDiagramacionDistribucionDetallePedido";
                        cmdDiagramacionDistribucionDetallePedido.CommandType = System.Data.CommandType.StoredProcedure;
                        cmdDiagramacionDistribucionDetallePedido.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                        cmdDiagramacionDistribucionDetallePedido.Parameters.Add("@IdDiagramacionDistribucionDetalle", System.Data.SqlDbType.Int).Value = oDetalle.IdDiagramacionDistribucionDetalle;
                        SqlDataReader drDetallePedido = cmdDiagramacionDistribucionDetallePedido.ExecuteReader();

                        while (drDetallePedido.Read())
                        {
                            oDetalle.AgregarPedido(pedidos.FirstOrDefault(x => x.IdPedido == Convert.ToInt16(drDetallePedido["Id_Pedido"])));
                        }

                    }

                    ColDiagramacionDistribucions.Add(oDiagramacionDistribucion);
                }

                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColDiagramacionDistribucions;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
        //public static DiagramacionDistribucion ConsultarDiagramacionDistribucionPorClave(int idDiagramacionDistribucion)
        //{
        //    try
        //    {

        //        DiagramacionDistribucion oDiagramacionDistribucion = new DiagramacionDistribucion();


        //        return oDiagramacionDistribucion;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw (ex);
        //    }
        //}

        public static int AgregarDiagramacionDistribucion(DiagramacionDistribucion oDiagramacionDistribucion)
        {
            SqlCommand cmdDiagramacionDistribucion = new SqlCommand();
            cmdDiagramacionDistribucion.CommandText = "sp_ModificarDiagramacionDistribucion";
            cmdDiagramacionDistribucion.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdDiagramacionDistribucion.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdDiagramacionDistribucion.Parameters.Add("@Id_DiagramacionDistribucion", System.Data.SqlDbType.Int).Value = 0;
            cmdDiagramacionDistribucion.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar).Value = oDiagramacionDistribucion.Estado.ToString();
            cmdDiagramacionDistribucion.Parameters.Add("@Fecha", System.Data.SqlDbType.Date).Value = oDiagramacionDistribucion.Fecha;

            var nro = (decimal)cmdDiagramacionDistribucion.ExecuteScalar();
            oDiagramacionDistribucion.IdDiagramacionDistribucion = (int)nro;

            foreach (DiagramacionDistribucionDetalle d in oDiagramacionDistribucion.Detalle)
            {
                SqlCommand cmdDiagramacionDistribucionDetalle = new SqlCommand();
                cmdDiagramacionDistribucionDetalle.CommandText = "sp_ModificarDiagramacionDistribuciondDetalle";
                cmdDiagramacionDistribucionDetalle.CommandType = System.Data.CommandType.StoredProcedure;
                cmdDiagramacionDistribucionDetalle.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdDiagramacionDistribucionDetalle", System.Data.SqlDbType.Int).Value = 0;
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdDiagramacionDistribucion", System.Data.SqlDbType.Int).Value = oDiagramacionDistribucion.IdDiagramacionDistribucion;
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdEmpleado", System.Data.SqlDbType.Int).Value = d.Empleado.IdEmpleado;
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdVehiculo", System.Data.SqlDbType.Int).Value = d.Vehiculo.IdVehiculo;

                var nro2 = (decimal)cmdDiagramacionDistribucionDetalle.ExecuteScalar();
                d.IdDiagramacionDistribucionDetalle = (int)nro2;

                foreach (Pedido p in d.Pedidos)
                {
                    SqlCommand cmdDiagramacionDistribuciondDetallePedido = new SqlCommand();
                    cmdDiagramacionDistribuciondDetallePedido.CommandText = "sp_AgregarDiagramacionDistribuciondDetallePedido";
                    cmdDiagramacionDistribuciondDetallePedido.CommandType = System.Data.CommandType.StoredProcedure;
                    cmdDiagramacionDistribuciondDetallePedido.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                    cmdDiagramacionDistribuciondDetallePedido.Parameters.Add("@IdDiagramacionDistribucionDetalle", System.Data.SqlDbType.Int).Value = d.IdDiagramacionDistribucionDetalle;
                    cmdDiagramacionDistribuciondDetallePedido.Parameters.Add("@IdPedido", System.Data.SqlDbType.Int).Value = p.IdPedido;

                    cmdDiagramacionDistribuciondDetallePedido.ExecuteScalar();
                }
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return 0;
        }

        public static int EliminarDiagramacionDistribucion(DiagramacionDistribucion oDiagramacionDistribucion)
        {
            foreach (DiagramacionDistribucionDetalle d in oDiagramacionDistribucion.Detalle)
            {
                SqlCommand cmdDistribucionDetallePedido = new SqlCommand();
                cmdDistribucionDetallePedido.CommandText = "sp_EliminarDistribucionDetallePedido";
                cmdDistribucionDetallePedido.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdDistribucionDetallePedido.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdDistribucionDetallePedido.Parameters.Add("@IdDiagramacionDistribucionDetalle", System.Data.SqlDbType.Int).Value = d.IdDiagramacionDistribucionDetalle;
                cmdDistribucionDetallePedido.ExecuteNonQuery();
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            }

            SqlCommand cmdDistribucionDetalle = new SqlCommand();
            cmdDistribucionDetalle.CommandText = "sp_EliminarDistribucionDetalle";
            cmdDistribucionDetalle.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdDistribucionDetalle.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdDistribucionDetalle.Parameters.Add("@Id_DiagramacionDistribucion", System.Data.SqlDbType.Int).Value = oDiagramacionDistribucion.IdDiagramacionDistribucion;
            cmdDistribucionDetalle.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            SqlCommand cmdDistribucion = new SqlCommand();
            cmdDistribucion.CommandText = "sp_EliminarDiagramacionDistribucion";
            cmdDistribucion.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdDistribucion.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdDistribucion.Parameters.Add("@Id_DiagramacionDistribucion", System.Data.SqlDbType.Int).Value = oDiagramacionDistribucion.IdDiagramacionDistribucion;
            cmdDistribucion.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");

            return 0;
        }

        public static int ModificarDiagramacionDistribucion(DiagramacionDistribucion oDiagramacionDistribucion)
        {
            foreach (DiagramacionDistribucionDetalle d in oDiagramacionDistribucion.Detalle)
            {
                SqlCommand cmdDiagramacionDistribucionDetalle = new SqlCommand();
                cmdDiagramacionDistribucionDetalle.CommandText = "sp_ModificarDiagramacionDistribuciondDetalle";
                cmdDiagramacionDistribucionDetalle.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdDiagramacionDistribucionDetalle.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdDiagramacionDistribucionDetalle", System.Data.SqlDbType.Int).Value = d.IdDiagramacionDistribucionDetalle;
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdDiagramacionDistribucion", System.Data.SqlDbType.Int).Value = oDiagramacionDistribucion.IdDiagramacionDistribucion;
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdEmpleado", System.Data.SqlDbType.Int).Value = d.Empleado.IdEmpleado;
                cmdDiagramacionDistribucionDetalle.Parameters.Add("@IdVehiculo", System.Data.SqlDbType.Int).Value = d.Vehiculo.IdVehiculo;
                cmdDiagramacionDistribucionDetalle.ExecuteNonQuery();
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            }
            return 0;
        }

        public static void CambiaEstado(DiagramacionDistribucion oDiagramacionDistribucion)
        {
                SqlCommand cmdDiagramacionDistribucion = new SqlCommand();
                cmdDiagramacionDistribucion.CommandText = "sp_CambiaEstado";
                cmdDiagramacionDistribucion.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdDiagramacionDistribucion.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdDiagramacionDistribucion.Parameters.Add("@Id_DiagramacionDistribucion", System.Data.SqlDbType.Int).Value = oDiagramacionDistribucion.IdDiagramacionDistribucion;
                cmdDiagramacionDistribucion.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar).Value = oDiagramacionDistribucion.Estado.ToString();
                cmdDiagramacionDistribucion.ExecuteNonQuery();
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
        }

        //private static bool AgregarProduccionProducto(int idDiagramacionDistribucion, ProduccionProducto produccionProducto)
        //{
        //    SqlCommand cmdProduccionProducto = new SqlCommand();
        //    cmdProduccionProducto.CommandText = "sp_ModificarProduccionProducto";
        //    cmdProduccionProducto.CommandType = System.Data.CommandType.StoredProcedure;
        //    cmdProduccionProducto.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
        //    cmdProduccionProducto.Parameters.Add("@Id_ProduccionProducto", System.Data.SqlDbType.Int).Value = 0;
        //    cmdProduccionProducto.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar).Value = ProduccionProducto.States.Creado;
        //    cmdProduccionProducto.Parameters.Add("@Fecha", System.Data.SqlDbType.Date).Value = DateTime.Today;
        //    cmdProduccionProducto.Parameters.Add("@CantidadDemanda", System.Data.SqlDbType.Int).Value = produccionProducto.CantidadDemanda;
        //    cmdProduccionProducto.Parameters.Add("@CantidadExedente", System.Data.SqlDbType.Int).Value = produccionProducto.CantidadExedente;
        //    cmdProduccionProducto.Parameters.Add("@CantidadProducida", System.Data.SqlDbType.Int).Value = produccionProducto.CantidadProducida;
        //    cmdProduccionProducto.Parameters.Add("@Id_Diagramacion", System.Data.SqlDbType.Int).Value = idDiagramacionDistribucion;
        //    cmdProduccionProducto.Parameters.Add("@Id_Producto", System.Data.SqlDbType.Int).Value = produccionProducto.Producto.IdProducto;

        //    var nro = (decimal)cmdProduccionProducto.ExecuteScalar();
        //    produccionProducto.IdProduccionProducto = (int)nro;

        //    foreach (ProduccionProductoDetalle det in produccionProducto.Detalle)
        //    {
        //        AgregarProduccionProductoDetalle(produccionProducto.IdProduccionProducto, det);
        //    }

        //    return true;
        //}
        //private static bool AgregarProduccionProductoDetalle(int idProduccionProducto, ProduccionProductoDetalle produccionProductoDetalle)
        //{
        //    SqlCommand cmdProduccionProductoDetalle = new SqlCommand();
        //    cmdProduccionProductoDetalle.CommandText = "sp_ModificarProduccionProductoDetalle";
        //    cmdProduccionProductoDetalle.CommandType = System.Data.CommandType.StoredProcedure;
        //    cmdProduccionProductoDetalle.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
        //    cmdProduccionProductoDetalle.Parameters.Add("@Id_ProduccionProductoDetalle", System.Data.SqlDbType.Int).Value = 0;
        //    cmdProduccionProductoDetalle.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar).Value = ProduccionProducto.States.Creado;
        //    cmdProduccionProductoDetalle.Parameters.Add("@CantidadProducir", System.Data.SqlDbType.Int).Value = produccionProductoDetalle.CantidadProducir;
        //    cmdProduccionProductoDetalle.Parameters.Add("@Id_Empleado", System.Data.SqlDbType.Int).Value = produccionProductoDetalle.Empleado.IdEmpleado;
        //    cmdProduccionProductoDetalle.Parameters.Add("@Id_ProduccionProducto", System.Data.SqlDbType.Int).Value = idProduccionProducto;

        //    var nro = (decimal)cmdProduccionProductoDetalle.ExecuteScalar();
        //    produccionProductoDetalle.IdProduccionProductoDetalle = (int)nro;

        //    return true;
        //}

        //private static bool EliminarProduccionProductoDetalle(int idDiagramacionDistribucion, ProduccionProducto produccionProducto)
        //{
        //    SqlCommand cmdProduccionProductoDetalle = new SqlCommand();
        //    cmdProduccionProductoDetalle.CommandText = "sp_EliminarProduccionProductoDetalle";
        //    cmdProduccionProductoDetalle.CommandType = System.Data.CommandType.StoredProcedure;
        //    cmdProduccionProductoDetalle.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
        //    cmdProduccionProductoDetalle.Parameters.Add("@Id_ProduccionProducto", System.Data.SqlDbType.Int).Value = produccionProducto.IdProduccionProducto;
        //    cmdProduccionProductoDetalle.ExecuteNonQuery();

        //    return true;
        //}
    }
}
